const axios = require('axios');

(async () => {
  console.log('🔧 修复系统问题...');
  
  try {
    // 1. 登录管理员账户
    const loginResponse = await axios.post('http://localhost:3000/api/auth/login', {
      email: 'admin@campus.com',
      password: 'admin123'
    });
    
    let authToken = loginResponse.data.token;
    console.log('✅ 管理员登录成功');
    
    // 如果管理员账户不存在，尝试用alice账户
    if (!authToken) {
      const aliceLogin = await axios.post('http://localhost:3000/api/auth/login', {
        email: 'alice@student.com',
        password: 'password123'
      });
      authToken = aliceLogin.data.token;
      console.log('✅ 使用alice账户');
    }
    
    // 2. 创建一个即将开始的活动
    console.log('\n📅 创建新的未来活动...');
    
    const now = new Date();
    const startTime = new Date(now.getTime() + 10 * 60 * 1000); // 10分钟后开始
    const endTime = new Date(now.getTime() + 70 * 60 * 1000);   // 70分钟后结束
    
    const newActivity = {
      title: '测试活动 - 可参与签到',
      description: '这是一个专门用于测试参与和签到功能的活动，可以正常获得NFT勋章',
      location: '测试地点',
      start_time: startTime.toISOString(),
      end_time: endTime.toISOString(),
      max_participants: 100,
      category_id: 1,
      requirements: '无特殊要求，欢迎所有用户参与测试',
      latitude: 39.90420000,
      longitude: 116.40740000
    };
    
    const activityResponse = await axios.post('http://localhost:3000/api/activities', newActivity, {
      headers: { Authorization: `Bearer ${authToken}` }
    });
    
    console.log('✅ 新活动创建成功:', activityResponse.data.activity.id);
    
    // 3. 创建一个正在进行中的活动（可以立即签到）
    console.log('\n📅 创建正在进行的活动...');
    
    const ongoingStartTime = new Date(now.getTime() - 5 * 60 * 1000); // 5分钟前开始
    const ongoingEndTime = new Date(now.getTime() + 55 * 60 * 1000);  // 55分钟后结束
    
    const ongoingActivity = {
      title: '正在进行的活动 - 立即签到',
      description: '这个活动正在进行中，参与后可以立即签到获得勋章',
      location: '活动现场',
      start_time: ongoingStartTime.toISOString(),
      end_time: ongoingEndTime.toISOString(),
      max_participants: 50,
      category_id: 2,
      requirements: '活动进行中，随时可参与和签到',
      latitude: 39.90420000,
      longitude: 116.40740000
    };
    
    const ongoingResponse = await axios.post('http://localhost:3000/api/activities', ongoingActivity, {
      headers: { Authorization: `Bearer ${authToken}` }
    });
    
    console.log('✅ 进行中活动创建成功:', ongoingResponse.data.activity.id);
    
    // 4. 测试参与新创建的活动
    console.log('\n🎯 测试参与新活动...');
    
    const newActivityId = activityResponse.data.activity.id;
    
    try {
      const joinResponse = await axios.post(`http://localhost:3000/api/activities/${newActivityId}/join`, {}, {
        headers: { Authorization: `Bearer ${authToken}` }
      });
      console.log('✅ 成功参与新活动:', joinResponse.data.message);
    } catch (joinError) {
      console.log('❌ 参与新活动失败:', joinError.response?.data?.error);
    }
    
    // 5. 测试参与正在进行的活动并立即签到
    console.log('\n🎯 测试参与进行中活动...');
    
    const ongoingActivityId = ongoingResponse.data.activity.id;
    
    try {
      // 参与活动
      const joinOngoingResponse = await axios.post(`http://localhost:3000/api/activities/${ongoingActivityId}/join`, {}, {
        headers: { Authorization: `Bearer ${authToken}` }
      });
      console.log('✅ 成功参与进行中活动:', joinOngoingResponse.data.message);
      
      // 立即签到
      console.log('📝 尝试立即签到...');
      const checkinResponse = await axios.post(`http://localhost:3000/api/activities/${ongoingActivityId}/checkin`, {
        latitude: 39.90420000,
        longitude: 116.40740000
      }, {
        headers: { Authorization: `Bearer ${authToken}` }
      });
      
      console.log('✅ 签到成功:', checkinResponse.data.message);
      console.log('🎖️ 勋章信息:', checkinResponse.data.badgeMessage);
      
    } catch (error) {
      console.log('❌ 测试失败:', error.response?.data?.error || error.message);
    }
    
    // 6. 等待一下让勋章生成，然后检查结果
    console.log('\n⏳ 等待勋章生成...');
    await new Promise(resolve => setTimeout(resolve, 3000));
    
    // 7. 检查勋章是否生成
    console.log('\n🏆 检查勋章生成结果...');
    
    const badgesResponse = await axios.get('http://localhost:3000/api/badges');
    console.log('📈 系统总勋章数量:', badgesResponse.data.badges?.length || 0);
    
    const userBadgesResponse = await axios.get('http://localhost:3000/api/badges?filter=owned', {
      headers: { Authorization: `Bearer ${authToken}` }
    });
    console.log('🎖️ 用户拥有勋章数量:', userBadgesResponse.data.badges?.length || 0);
    
    if (userBadgesResponse.data.badges?.length > 0) {
      console.log('✅ 勋章获取成功！');
      userBadgesResponse.data.badges.forEach((badge, index) => {
        console.log(`   勋章 ${index + 1}: ${badge.badge_name || badge.name}`);
      });
    } else {
      console.log('⚠️ 勋章尚未生成，可能需要更多时间');
    }
    
    console.log('\n🎉 系统修复完成！');
    console.log('📋 现在您可以：');
    console.log(`  1. 参与活动 ID: ${newActivityId} (即将开始)`);
    console.log(`  2. 参与活动 ID: ${ongoingActivityId} (正在进行，可立即签到)`);
    console.log('  3. 在活动开始后进行签到获得NFT勋章');
    
  } catch (error) {
    console.error('❌ 修复过程出错:', error.message);
    if (error.response) {
      console.error('详细错误:', error.response.data);
    }
  }
})(); 